ALBのアクセスログを有効にする際、Access Deniedになった時にS3バケットで確認するポイント
はじめに
ALBのアクセスログをS3バケットに出力するために、ALBを設定変更すると、Access Denied
と表示されました。
Access Denied for bucket: <バケット名>. Please check S3bucket permission
このエラーを対処するために、S3バケット側で確認するポイントをご説明します。
前提条件
以下の2つのリソースを作成済み
- ALBの作成
- ALB名:
test
- リージョン:東京リージョン
- ALB名:
- S3バケット
- バケット名:
alb-accesslog-20230322
- リージョン:東京リージョン
- バケット名:
KMSキーが適切か
S3バケットのサーバー側の暗号化キーがAmazon S3 マネージドキー(SSE-S3) であるかどうかです。
ドキュメントにも記載がありますが、ELBのアクセスログに対して、サーバー側の暗号化キーは、SSE-S3のみをサポートしています。
サポートされている唯一のサーバー側の暗号化オプションは、Amazon S3 マネージドキー (SSE-S3) です
アクセスログ用のバケットの要件
SSE-KMSは、サポートしてしていませんので、している場合は、SSE-S3に変更しましょう。
バケットの[デフォルトの暗号化]から変更できます。
SSE-S3に変更しました!
ALBとS3バケットは、同一リージョンか
2つのリソースが同一リージョンである必要があります。
もし別リージョンで作成していた場合、同一リージョンに変更しましょう。
バケットは、ロードバランサーと同じリージョンに配置されている必要があります。 アクセスログ用のバケットの要件
S3バケットポリシーは適切か
ALBからのアクセスログが出力されるよう、バケットポリシーで許可する設定が必要です。
必要なバケットポリシーの設定は、下記のドキュメントに記載がありました。
東京リージョンの場合、以下のポリシーを設定する必要があります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::elb-account-id:root" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::bucket-name/prefix/AWSLogs/your-aws-account-id/*" } ] }
elb-account-id
は、ロードバランサーのリージョンに対応するAWSアカウントIDを設定する必要があります。
そのためelb-account-id
は、自分のアカウントIDではないことに注意して下さい
elb-account-id
は、ドキュメントにも記載がありますが、東京リージョンの場合、582318560864
でした。
今回の構築のバケットポリシーは以下の様に設定しました。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::582318560864:root" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::alb-accesslog-20230322/*" } ] }
アクセスログの出力先のパスは、/
にしております。
他のリージョンの場合
ちなみに、下記のリージョンの場合、先程のバケットポリシーとは異なるので、注意して下さい。
- アジアパシフィック (ハイデラバード)
- アジアパシフィック (メルボルン)
- 欧州 (スペイン)
- 欧州 (チューリッヒ)
- 中東 (アラブ首長国連邦)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logdelivery.elasticloadbalancing.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::bucket-name/prefix/AWSLogs/aws-account-id/*" } ] }
ロードバランサーのリージョンに対応するAWSアカウントIDは、不要のようですね。
確認後
確認ポイントを修正し、再度アクセスログを有効に設定すると、有効化できました!
参考になれば幸いです。